home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Leser 15 / Amiga Plus Leser CD 15.iso / Tools / Development / PluginSRC_EvenMore / FinalWriter2Text.e < prev    next >
Encoding:
Text File  |  2002-03-13  |  4.1 KB  |  179 lines

  1. /*
  2.    FinalWriter2Text
  3.    EvenMore FileIO plugin
  4.    Author: Chris Perver
  5.    Copyright (c) 2001
  6. */
  7.  
  8.  
  9. OPT REG=5
  10.  
  11. LIBRARY 'finalwriter2text.plugin',1,1,'FinalWriter2Text 1.01' IS em_main, em_end, em_info, em_pluginid, em_begin, em_format
  12.  
  13. MODULE 'tools/ctype', '*epo'
  14.  
  15. DEF mem2, len2
  16.  
  17.  
  18. PROC em_isdatatype(memadr, lenadr)
  19.    DEF vers = FALSE
  20.    DEF w:PTR TO LONG
  21.  
  22.    -> Check for FORM header
  23.  
  24.    w := Long(memadr)
  25.    IF w = "FORM"
  26.      w := Long(memadr + 8)
  27.      IF w = "SWRT" THEN vers := TRUE
  28.    ENDIF
  29.  ->  WriteF('hhhehheh \d\n', vers)
  30. ENDPROC vers
  31.  
  32.  
  33. PROC em_parsedata(memadr, lenadr)
  34.   DEF count = 0, count2 = 0
  35.   DEF wrapping = 80, notdonewrapping = TRUE, currchar = 0
  36.   DEF notdone = TRUE
  37.   -> Allocate memory for file
  38. ->  IF (mem2 := New(lenadr + 1)) = NIL THEN RETURN -1
  39. ->  mem2[lenadr + 1] := "\n"                                                      -> Put safety LF at the end of mem
  40.   DEF w:PTR TO LONG
  41. ->  DEF iswtxt = FALSE
  42.  
  43.   mem2 := memadr
  44.  
  45.    WHILE notdone AND (count < lenadr)
  46. ->    WriteF('hey')
  47. /*     IF (currchar >= wrapping)
  48. ->       WriteF('wrapped \d', count)
  49.        WHILE notdonewrapping
  50.          SELECT 256 OF memadr[count]
  51.            CASE $00
  52.              DEC count
  53.            DEFAULT
  54.              IF isspace(memadr[count]) = FALSE
  55.                DEC count
  56.                DEC count2
  57.              ELSE
  58.                notdonewrapping := FALSE
  59.              ENDIF
  60.          ENDSELECT
  61.        ENDWHILE
  62.        INC count
  63.  
  64.        currchar := 0
  65.        memadr[count2++] := "\n"
  66.        notdonewrapping := TRUE
  67.      ENDIF
  68.  */
  69.  
  70.  
  71.      w := Long(memadr + count)
  72.  
  73.  ->    SELECT 256 OF memadr[count]
  74.  
  75.  ->      CASE "C"
  76.  ->        w := Long(memadr + count)
  77.          SELECT w
  78.            -> ???
  79.            CASE "RULE"
  80.              count := count + 4
  81.              mem2[count2++] := "\n"
  82.              currchar := 0
  83.            CASE "RMST"
  84.              count := count + 4
  85.            CASE "LMST"
  86.              count := count + 4
  87.            CASE "CHRS"
  88.              count := count + 8
  89.              w := Long(memadr + count)
  90.              SELECT w
  91.                CASE "RULE"
  92.                  mem2[count2++] := "\n"
  93.                  count := count + 4
  94.                  currchar := 0
  95.                CASE "LMST"
  96.                  count := count + 4
  97.                CASE "RMST"
  98.                  count := count + 4
  99.                DEFAULT
  100.  
  101.                  WHILE (memadr[count] <> $00)
  102.                    mem2[count2++] := memadr[count++]
  103.                    INC currchar
  104.                    IF currchar >= wrapping
  105.                      notdonewrapping := TRUE
  106.                      WHILE notdonewrapping
  107.                ->        SELECT 256 OF memadr[count]
  108.                ->          DEFAULT
  109.                            IF isspace(memadr[count]) = FALSE
  110.                              DEC count
  111.                              DEC count2
  112.                            ELSE
  113.                              notdonewrapping := FALSE
  114.                            ENDIF
  115.                ->        ENDSELECT
  116.                      ENDWHILE
  117.                      INC count
  118.  
  119.                      currchar := 0
  120.                      memadr[count2++] := "\n"
  121.                    ENDIF
  122.                  ENDWHILE
  123.  
  124.                  w := Long(memadr + count - 4)
  125.                  SELECT w
  126.                    CASE "RULE"
  127.                     count2 := count2 - 4
  128.                     mem2[count2++] := "\n"
  129.                     currchar := 0
  130.                  ENDSELECT
  131.  
  132.                  INC count
  133.              ENDSELECT
  134.            DEFAULT
  135.              INC count
  136.          ENDSELECT
  137.  
  138.    ENDWHILE
  139.  
  140.  
  141.   mem2[count2] := "\n"
  142.  
  143.  -> IF memadr
  144.  ->   Dispose(memadr); memadr := NIL
  145.  -> ENDIF
  146. ENDPROC mem2, count2
  147. -><
  148.  
  149. -> *** STANDARD PROCS FOR PLUGINS
  150.  
  151.  
  152. PROC em_main(epo:PTR TO em_pluginobj)
  153.   mem2, len2 := em_parsedata(epo.buffer, epo.length)
  154.   epo.buffer := mem2
  155.   epo.length := len2
  156.   RETURN TRUE
  157. ENDPROC
  158.  
  159. PROC em_begin(epo:PTR TO em_pluginobj)
  160.   DEF vers
  161.   vers := em_isdatatype(epo.buffer, epo.length)
  162.   IF vers
  163.     RETURN TRUE
  164.   ELSE
  165.     RETURN FALSE
  166.   ENDIF
  167.  
  168. ENDPROC
  169.  
  170. PROC em_end()      IS EMPTY
  171.  
  172. PROC em_info()     IS 'FinalWriter2Text 1.01'
  173.  
  174. PROC em_pluginid() IS "FILE"
  175.  
  176. PROC em_format()   IS 'FinalWriter/Copy'
  177.  
  178. PROC main()        IS EMPTY
  179.